desc:Hycomp V 0.02
author: Belovw
V 0.01 1.06.2022 Initial release
V 0.02 2.06.2022 lightly RMS compression

slider1:0<-20,20,1>In
slider2:0<-40,0,0.1>Treshold

slider4:17<0.01,100,0.01>Attack
slider5:170<10,1000,0.01>Release
slider6:4<0,10,1>-RMS

slider8:0<-12,12,1>Gain
slider9:90<0,100,1>-Mix %

@init
gr_meter=1;

@slider

ginv=10^(slider1/20);
T=10^(-slider2/20);
T2=T*2;

aa=exp(-log(9)*1000/srate/slider4);
Coeff=exp(-1/(srate * 0.001 * slider6));
ar=exp(-log(9)*1000/srate/slider5);
goutv=10^(slider8/20);
m1=slider9/100;
m0=1-m1;

@block


@sample
spl0+=0.0000001;
spl1+=0.0000001;
spl0*=ginv;
spl1*=ginv;

in=max(abs(spl0),abs(spl1)); // Detecet IN
e2f0=$e^(T2*in);
insc=(e2f0-1)/(e2f0+1)/T;
gv=insc/in;
g=20*log10(gv);
/*
Coeff != 0 ? (
              RMS=RMS*Coeff+g*g*(1-Coeff);
              SRMS=g=-1.4*sqrt(RMS);
              );
*/
g<g0 ? (g0=aa*g0 + (1-aa)*g) : (g0=ar*g0 + (1-ar)*g); 

gout=(m0+m1*10^(g0/20))*goutv;
spl0*=gout;
spl1*=gout;


@gfx 0 32 // request horizontal/vertical heights (0 means dont care)

  gr_meter=min(10^(g0/20),gr_meter);
  gr_meter *= exp(1/20); gr_meter>1 ? gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick"
  gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8;
  
  meter_bot=20;
  meter_h=min(gfx_h,32);
  xscale=gfx_w*20/meter_bot;

  gfx_y=0;
  gfx_x=gfx_w + log10(gr_meter)*xscale;
  gfx_rectto(gfx_w,meter_h/2);
  
//  gfx_y=0;
 gfx_r=0; gfx_g=gfx_b=1; gfx_a=0.8;
  gfx_x=gfx_w + log10(m0*1+m1*gr_meter)*xscale;
  gfx_rectto(gfx_w,meter_h);

  gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6;

  s2=sqrt(2)/2;
  gg = s2;
  while(
    gfx_x=gfx_w + log10(gg)*xscale;
    gfx_x >= 0 ? 
    (
      gfx_y=0;
      gfx_lineto(gfx_x,meter_h,0);
      gfx_y=meter_h-gfx_texth;
      gfx_x+=2;
      gfx_drawnumber(log10(gg)*20,0);
      gfx_drawchar($'d');
      gfx_drawchar($'B');
    );
    gg*=s2;
    gfx_x >=0;
  );
  gfx_a=1;

  gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2;
  gfx_drawnumber(log10(gr_meter)*20,1);
  gfx_drawchar($'d');
  gfx_drawchar($'B');
